﻿#/usr/bin/perl
<<DOC; 
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
 Par exemple : perl parcours-arborescence-fichiers-2018.pl 2017 3208
 Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter et le "nom" de la rubrique à traiter
DOC
#VOICI LE SCRIPT PERL PERMETTANT D EXTRAIRE DES CONTENUS DES FILS RSS 
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $type="$ARGV[1]";
my%dico;
$rep=~ s/[\/]$//;

my $codage = "utf-8";
#my $compteurfile=1;
#------------------------------------
my $output1="$type.txt";
if (!open (FILEOUT,">:encoding($codage)",$output1)) { die "Pb à l'ouverture du fichier $output1"
};
close(FILEOUT);

my $output2="$type.xml";
if (!open (FILEOUT2,">:encoding($codage)",$output2)) { die "Pb à l'ouverture du fichier $output2"
};

print FILEOUT2 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT2 "<PARCOURS>\n";
print FILEOUT2 "<NOM>Elodie VILLARD, 2017-2018</NOM>\n";
close (FILEOUT2);

&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence

open (FILEOUT2, ">>encoding(utf-8)", $output2);
print FILEOUT2 "</PARCOURS>\n";
close (FILEOUT2);
exit;
#----------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
	next if $file =~ /^\.\.?$/;
		next if $file=~ /^\._/;
		next if $file=~ /^fil/;
	$file = $path."/".$file;
	if (-d $file) {
		print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
		&parcoursarborescencefichiers($file);	#recurse!
		print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
            if ($file =~ /$rubrique.+\.xml$/) {
                print "<",$i++,"> ==> ",$file,"\n";
				$codage = "utf-8";
                
                open(FIC, "<:encoding($codage)", $file);
				open(OUT, ">>:encoding($codage)", "$type.txt");
				open(OUT2, ">>:encoding($codage)", "$type.xml");
				my $ensemble="";
                while (my $ligne=<FIC>) {
                    chomp $ligne;
					$ligne =~ s/\r//g;
					$ensemble = $ensemble . $ligne ;
                }
				close FIC;
				$ensemble =~s/>\s+</></g;
                while ($ensemble =~/<item><title>([^<]+?)<\/title><link>(?:[^<]+?)<\/link><description>([^<]+?)<\/description>/g) {
					my $titre = $1;
					my $description= $2;
					$titre.=".";
					$titre=~s/\?\.$/\?/;
					$description=~s/&lt;.+?&gt;//g;
					#mettre création fichier xml
					if (!(exists $dico{$titre})) {
						$dico{$titre}= 1;
						print OUT "TITRE : $titre\n";
						print OUT "DESCRIPTION : $description\n";
						
						my ($titre_tag,$description_tag) = &etiquetage ($titre,$description);
						print OUT2 "<item><title>$titre_tag</title><description>$description_tag</description></item>\n";
					}			
				}	
						
				close OUT;
				close OUT2;
                        
            }
               
        }
			
		
    }
}
#----------------------------------------------

sub nettoyage {
    my $var1 = shift(@_);
    my $var2 = shift(@_);
    $var1=~s/&lt;.+?&gt;//g; # nettoyage à compléter...
    $var2=~s/&lt;.+?&gt;//g; # nettoyage à compléter...
	$var1.="."; #on concatène un point au titre
	$var1=~s/\?\.$/\?/;
    return $var1,$var2 ;
# dans cordial, on veut le lemme et la catégorie, on décoche le reste, attention à mettre le fichier en ANSI puis dès qu'on a le résultat le remettre en utf-8 
#perl tokenizer + nom fichier | ./tree-tager.exe + fichier langue -lemma -token (demande à tree tager de faire le travail d'étiquetage avec le mot + lemme) -no-unknow > fichierdesauvegarde
#perl fichier2xml + fichierconcerné + encodage (3argmuments)
}

sub etiquetage {
	my $var1 = shift(@_);
	my $var2 = shift(@_);
	open(OUT, ">:encoding(utf8)","titre_tmp.txt"); #préparation du fichier (temporaire) à tokenizer
	print OUT $var1; 
	close OUT;
	system("perl tokenise-utf8.pl titre_tmp.txt | tree-tagger.exe -lemma -token -no-unknown french-utf8.par > titre_tmp_etiq.txt");
	system ("perl5.26.1 treetagger2xml-utf8.pl titre_tmp_etiq.txt utf8");
	$/=undef;
	open (FIC, "<:encoding(utf8)", "titre_tmp_etiq.txt.xml");
	my $titre_retour=<FIC>;
	$titre_retour =~s/<\?xml version="1\.0" encoding="utf-8" standalone="no"\?>\r\n//;
	close(FIC);
	open(OUT, ">:encoding(utf8)","description_tmp.txt"); #préparation du fichier (temporaire) à tokenizer
	print OUT $var2; 
	close OUT;
	system("perl tokenise-utf8.pl description_tmp.txt | tree-tagger.exe -lemma -token -no-unknown french-utf8.par > description_tmp_etiq.txt");
	system ("perl5.26.1 treetagger2xml-utf8.pl description_tmp_etiq.txt utf8");
	open (FIC, "<:encoding(utf8)", "description_tmp_etiq.txt.xml");
	my $description_retour=<FIC>;
	$description_retour =~s/<\?xml version="1\.0" encoding="utf-8" standalone="no"\?>\r\n//;
	close FIC;
	$/="\n"; #remettre la valeur par défaut
	return ($titre_retour, $description_retour);
# $/ : scalaire, par defaut porte la valeur "\n", on remplace par "" <- il va lire tout le fichier. 
#perl tokenise-utf8.pl texteaetiqueter.txt | ./tree-tagger.exe
}
